<?php
namespace core\models;
/**
 * 数据库连接工厂
 * @author   howard
 * @formatter:off
 */
class Database {
    /**
     * 保存已经打开的数据库连接
     * @var Database_Mysql 保存创建的数据库连接对象
     */
    private static $_db = array();

    /**
     * 初始化数据库连接，使用此类，不能直接new，而是调此静态方法
     * @param string $type     数据库连接驱动类型，如：Mysqli
     * @param string $server   数据库服务器IP地址
     * @param string $username 用户名称
     * @param string $password 用户密码
     * @param string $database 数据库名称
     * @param string $charset  数据库编码，如：utf8,latin1
     * @return Database_Mysqli
     */
    public static function open($type, $server, $username, $password, $database, $charset) {
        $tag = $database . $type . $server . $username . $password . $database . $charset;
        if (empty(self::$_db[$tag])) {
            $space           = '\core\models\\';
            $class           = $space . 'Database_' . $type;
            $pdo_handle      = new $class($server, $username, $password, $database, $charset);
            self::$_db[$tag] = $pdo_handle;
        }
        return self::$_db[$tag];
    }

    /**
     * 数据库连接工厂
     * @throws Exception 提示团员成员此类不能直接new
     */
    public function __construct() {
        throw new Exception('此类不能直接new');
    }
}
